/**
 * request 使用说明
 * 用于有 token 等请求
 * @param {String} url : 后端的请求地址
 * @param {String} tempFilePaths : 文件的临时地址
 * @param {Object} data: 请求的额外参数
 * @param {String} name: 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
 * @param {String} fileType: 文件类型，image/video/audio (仅支付宝小程序，且必填。)
 **/

import baseURL from '@/config/baseURL.js';
import getStateFn from '@/utils/state.js';
import { Storage } from '@/utils/storage';
/**
 * 获取请求头信息
 **/
export function getHeaders() {
	return {
		ACCESS_TOKEN: Storage.getData("ACCESS_TOKEN"),
	};
}

function request({ url, tempFilePaths, data = {}, name = 'file' , fileType}) {
	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url: baseURL + url,
			// #ifdef H5
			file: tempFilePaths,
			// #endif
			// #ifndef H5
			filePath: tempFilePaths,
			// #endif
			name,
			// #ifdef MP-ALIPAY
			fileType: fileType ? fileType : 'image',
			// #endif
			header: getHeaders(),
			formData: {
				...data,
			},
			timeout: 5000,
			success: res => {
				// resolve; 控制台正常颜色输出
				// reject; 控制台 红色颜色输出
				if (res.data.code == 200) {
					// 控制台正常颜色输出
					resolve(res.data);
				}

				// 异常处理函数
				const stateOpt = getStateFn(res);
				if (stateOpt.state === 'waring') {
					// 控制台 红色颜色输出
					reject(res.data);
				}
			},
			fail: error => {
				reject(error);
			},
			complete: error => {
				// 关闭加载
				uni.hideLoading();
			},
		});
	});
}

export default request;
